import { createProxyMiddleware } from "http-proxy-middleware"
const express = require('express')

var newProxy: any = {};

// 格式化不同端口的接口数据
const forMatProxy = (data) => {
  let result = {}
  data.forEach(v=> {
    if(!result[v.port]){
      newProxy[v.port] = express();
      result[v.port] = []
    }
    let model = result[v.port].find(j=> j.baseUrl == v.baseUrl)
    !model && result[v.port].push(v)
  })

  return result
}

// 初始化请求拦截器
const reloadHttp = (data: string) => {
  return new Promise((resolve, _reject)=> {
    try{
      // 获取所有的接口代理集合
      let arr = JSON.parse(data);

      // 关闭上一次的接口代理
      if(Object.keys(newProxy).length){
        Object.keys(newProxy).forEach((v: any)=> {
          newProxy[`${v}_serve`] && newProxy[`${v}_serve`].close();
        })
        newProxy = {}
      }
  
      // 分组不同端口下的接口代理
      let forMat = forMatProxy(arr)
  
      // 生成代理
      Object.keys(forMat).forEach((j: any)=> {
        let proxyServe = newProxy[j]
        forMat[j].forEach(v=> {
          // 此处对禁用的代理ip进行过滤
          if(!v.allow){ return }
          proxyServe.use(v.proxy, createProxyMiddleware({
            target: v.baseUrl,
            changeOrigin: true,
            pathRewrite: {
              [v.proxy]: ''
            }
          }))
        })
        
        // 绑定对应服务，方便二次初始化的时候关闭
        newProxy[`${j}_serve`] = proxyServe.listen(j)
      })
      resolve('success')
    }catch(err){
      console.log(err)
      resolve('error')
    }
  })
}

export default reloadHttp